package com.xd.pre.modules.tpshop.controller;

import com.xd.pre.common.utils.Result;
import com.xd.pre.modules.tpshop.domain.TpGoodsCategory;
import com.xd.pre.modules.tpshop.service.ITpGoodsCategoryService;
import com.xd.pre.modules.tpshop.service.ITpGoodsService;
import com.xd.pre.modules.tpshop.util.CommonFunction;
import com.xd.pre.modules.tpshop.virtuaBean.GoodsCategory_virtual;
import com.xd.pre.modules.tpshop.virtuaBean.GoodsCategory_virtual_forCategory;
import net.sf.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 * 前端控制器
 * </p>
 *
 * @author lx
 * @since 2020-06-03
 */
@RestController
@RequestMapping("/goodsCategory")
public class TpGoodsCategoryController {

    @Autowired
    private ITpGoodsCategoryService gcb_biz;
    @Autowired
    private ITpGoodsService gb_biz;


    // http://localhost:8080/tpshop_server/goodsCategory/findAll_goodsCategory
    @RequestMapping(value = "/findAll_goodsCategory", method = RequestMethod.GET)
    public Result findAll_goodsCategory(HttpServletRequest request) {
        Result res = new Result();
        List<TpGoodsCategory> list = gcb_biz.list();
//        List<TpGoodsCategory> list = gcb_biz.findAll_goodsCategory();
        if (null != list && !list.isEmpty()) {
            List<GoodsCategory_virtual> gcv_list = new ArrayList<GoodsCategory_virtual>();
            JSONObject jb2 = new JSONObject();
//			Map<String ,List> mm = new HashMap<String ,List>();

            JSONObject jb = new JSONObject();
            GoodsCategory_virtual gc_v = null;
            for (int i = 0; i < list.size(); i++) {
                if (null != (gb_biz.findgoodslist_byCategory(list.get(i).getCategoryId())) && !(gb_biz.findgoodslist_byCategory(list.get(i).getCategoryId())).isEmpty()) {
                    gc_v = new GoodsCategory_virtual(
                            list.get(i).getCategoryId(),
                            list.get(i).getName(),
                            list.get(i).getImage(),
                            gb_biz.findgoodslist_byCategory(list.get(i).getCategoryId())
                    );

//					jb.put("categoryId", list.get(i).getCategoryId());
//					jb.put("name", list.get(i).getName());
//					jb.put("image", list.get(i).getImage());
//					jb.put("goods_list", gb_biz.findgoodslist_byCategory(list.get(i).getCategoryId() ));

                    gcv_list.add(gc_v);
//					jb2.put("goods_list", jb);
                }

            }

            res.setData(gcv_list);
        }

        return res;

    }

    /*
    {
        "status":"success",
        "tipCode":"",
        "tipMsg":"",
        "data":[
            {
                "categoryId":12,
                "name":"手机配件",
                "image":"/Public/upload/category/2016/04-02/56ffa28b12f4f.jpg",
                "gl":[
                    {
                        "goodsId":1,
                        "categoryId":12,
                        "goodsSn":"TP000000",
                        "originalImg":"/Public/upload/goods/2016/03-09/56e01a4088d3b.jpg",
                        "goodsName":"Apple iPhone 6s Plus 16G 玫瑰金 移动联通电信4G手机",
                        "brandId":11,
                        "storeCount":1000,
                        "commentCount":4,
                        "weight":150,
                        "marketPrice":6100,
                        "shopPrice":6000,
                        "goodsRemark":"选择【联通合约机0元购机】，购机款仅需4066选择【移动合约机】，锯惠5588，不换号，购机入网返高额话费~选【电信合约机】，买手机送话费！激活到账100元，实付低至29元/月，月享4GB大流量",
                        "goodsContent":"<p style="text-align: center;"><img src="/Public/upload/goods/2016/03-09/56e01a6586cd0.jpg" title="4.jpg"/></p>",
                        "clickCount":317,
                        "isOnSale":1,
                        "isFreeShipping":0,
                        "isRecommend":1,
                        "isNew":1,
                        "isHot":1,
                        "goodsType":4,
                        "specType":4,
                        "sku":""
                    }
                ]
            },
            {
                "categoryId":191,
                "name":"平板电脑",
                "image":"",
                "goods_list":[
                    {
                        "goodsId":39,
                        "categoryId":191,
                        "goodsSn":"TP000000",
                        "originalImg":"/Public/upload/goods/2016/01-13/5695b2f14616a.jpg",
                        "goodsName":"华为（HUAWEI） M2 10.0 平板电脑 WiFi 月光银",
                        "brandId":15,
                        "storeCount":1000,
                        "commentCount":3,
                        "weight":1000,
                        "marketPrice":2388,
                        "shopPrice":2288,
                        "goodsRemark":"今日起商城搞活动,注册立马送30元代金券,全场满69全国包邮,全场满299送20元优惠券,全场满399送电影票,满999送美国旅游景点门票1张",
                        "goodsContent":"<p><img src="/Public/upload/goods/2016/01-13/5695b35c538bb.jpg" style="float:none;" title="428_428_1452218607027.jpg"/></p><p><img src="/Public/upload/goods/2016/01-13/5695b35c65802.jpg" style="float:none;" title="428_428_1452218609169.jpg"/></p><p><img src="/Public/upload/goods/2016/01-13/5695b35c7b577.jpg" style="float:none;" title="428_428_1452218613383.jpg"/></p><p><br/></p>",
                        "clickCount":34,
                        "isOnSale":1,
                        "isFreeShipping":0,
                        "isRecommend":1,
                        "isNew":0,
                        "isHot":1,
                        "goodsType":15,
                        "specType":15,
                        "sku":""
                    },
                    {
                        "goodsId":40,
                        "categoryId":191,
                        "goodsSn":"TP0000040",
                        "originalImg":"/Public/upload/goods/2016/01-13/5695bd0ba3d1d.jpg",
                        "goodsName":"荣耀X2 标准版 双卡双待双通 移动/联通双4G 16GB ROM（月光银）",
                        "brandId":15,
                        "storeCount":1000,
                        "commentCount":3,
                        "weight":1000,
                        "marketPrice":2099,
                        "shopPrice":1999,
                        "goodsRemark":"今日起商城搞活动,注册立马送30元代金券,全场满69全国包邮,全场满299送20元优惠券,全场满399送电影票,满999送美国旅游景点门票1张",
                        "goodsContent":"<p><img src="/Public/upload/goods/2016/01-13/5695bd6ddd3f5.jpg" style="float:none;" title="428_428_1443086923441.jpg"/></p><p><img src="/Public/upload/goods/2016/01-13/5695bd6deed8b.jpg" style="float:none;" title="428_428_1443086925858.jpg"/></p><p><img src="/Public/upload/goods/2016/01-13/5695bd6e11704.jpg" style="float:none;" title="428_428_1443086930218.jpg"/></p><p><br/></p>",
                        "clickCount":35,
                        "isOnSale":1,
                        "isFreeShipping":0,
                        "isRecommend":1,
                        "isNew":0,
                        "isHot":1,
                        "goodsType":15,
                        "specType":15,
                        "sku":""
                    },
                    {
                        "goodsId":41,
                        "categoryId":191,
                        "goodsSn":"TP0000041",
                        "originalImg":"/Public/upload/goods/2016/01-13/5695bf6426994.jpg",
                        "goodsName":"华为（HUAWEI） M2 8英寸平板电脑（1920×1200 IPS屏 海思麒麟930 16GB WiFi）香槟金",
                        "brandId":15,
                        "storeCount":1000,
                        "commentCount":3,
                        "weight":1000,
                        "marketPrice":1688,
                        "shopPrice":1588,
                        "goodsRemark":"今日起商城搞活动,注册立马送30元代金券,全场满69全国包邮,全场满299送20元优惠券,全场满399送电影票,满999送美国旅游景点门票1张",
                        "goodsContent":"<p><img src="/Public/upload/goods/2016/01-13/5695bf965a51e.jpg" style="float:none;" title="428_428_1.jpg"/></p><p><img src="/Public/upload/goods/2016/01-13/5695bf966fdaf.jpg" style="float:none;" title="428_428_1436778773358.jpg"/></p><p><img src="/Public/upload/goods/2016/01-13/5695bf968425d.jpg" style="float:none;" title="428_428_1436778776369.jpg"/></p><p><br/></p>",
                        "clickCount":36,
                        "isOnSale":1,
                        "isFreeShipping":0,
                        "isRecommend":1,
                        "isNew":0,
                        "isHot":1,
                        "goodsType":15,
                        "specType":15,
                        "sku":""
                    }
                ]
            }
        ]
    }


    */
    //parent_id=0：表示 分类左边菜单一级分类
    // http://localhost:8080/tpshop_server/goodsCategory/findgoodsCategoryList?parent_id=0
    @RequestMapping(value = "/findgoodsCategoryList", method = RequestMethod.GET)
    //查询`tp_goods_category`表中的 顶级分类——by"parent_id"
    public Result findgoodsCategoryList(HttpServletRequest request) {
        Result res = new Result();

        String parent_id = request.getParameter("parent_id");
        if (!CommonFunction.stringCheckNotNull(parent_id)) {
            res.setStatus(Result.FAILED);
            res.setTipMsg("参数parent_id为null");
            return res;
        }
        List<TpGoodsCategory> gc_list_2_3 = gcb_biz.findgoodsCategoryList(Integer.parseInt(parent_id));
        System.out.println("左侧一级菜单的size(): " + gc_list_2_3.size()); //size()=7是因为 8~11的 `is_show`=0 ！！！
        if (CommonFunction.listCheckNotNull(gc_list_2_3)) {
            res.setStatus(Result.SUCCESS);
            res.setTipMsg("获取成功");
            res.setData(gc_list_2_3);
            return res;
        }
        res.setStatus(Result.FAILED);
        return res;
    }

    //根据一级分类获取对应的二三级分类	// http://localhost:8080/tpshop_server/goodsCategory/findgoodsSecAndThirdCategoryList?key_id=1
    //* parentIdPath： 家族图谱 id(本项目中定义最大3级标题！)   类似“0_1”格式的是一级标题, 类似“0_1_12”格式的是二级标题,类似“0_1_12_12”格式的是二级标题, 第二位永远表示一级标题的某个item！
    //* 所以此处的parentID等于几就代表 当前你点击的那个一级标题的item(即：keyId)
    @RequestMapping(value = "/findgoodsSecAndThirdCategoryList", method = RequestMethod.GET)
    //查询`tp_goods_category`表中的 顶级分类——by"parent_id"
    public Result findgoodsSecAndThirdCategoryList(HttpServletRequest request) {
        Result res = new Result();
        String key_id = request.getParameter("key_id"); // `tp_goods_category`的主键id(一级标题 范围！)：1代表“手机 、 数码 、 通信”，3代表“家用电器”，3代表“电脑、办公”，......，11代表“图书、音像、电子书”
        if (!CommonFunction.stringCheckNotNull(key_id)) {
            res.setStatus(Result.FAILED);
            res.setTipMsg("参数parent_id为null");
            return res;
        }

        List<TpGoodsCategory> gc_list_2_3 = gcb_biz.findgoodsSecAndThirdCategoryList(Integer.parseInt(key_id));//当前一级标题 所属的 二级和三级标题的list


        if (CommonFunction.listCheckNotNull(gc_list_2_3)) {
            System.out.println("-测试—1-:" + gc_list_2_3.size());
            List<GoodsCategory_virtual_forCategory> gc_list_2 = new ArrayList<>(); // get 当前一级标题 所属的二级标题的list(每一个二级标题的list的item都 写入了它所持有的 三级标题集合！！！)

            for (int i = 0; i < gc_list_2_3.size(); i++) {    // 遍历 当前一级标题 所属的 二级和三级标题的list

//				int count_3title = 0;
//				List<Integer> count_3title_list = new ArrayList<Integer>();
                //过滤：三级标题 没有子标题： 针对getLevel() ==3的 我们不做 if(gc_list_2_3.get(i).getCategoryId() == gc_list_2_3.get(j).getParentId() ) 判断， 所以经过这层过滤 下面对于第i个当前bean的判断都是二级标题！！！
                if (gc_list_2_3.get(i).getLevel() == 3) {        //i=0时：--gc_list_2_3.get(i)=“手机配件”
//					count_3title_list.add(i);
//					count_3title += count_3title ;
//					System.out.println("-测试—2-:"+ gc_list_2_3.get(i).getName() );	// i=0 时 不走这块！

                    continue;// 把gc_list中的三级标题过滤掉！	三级标题 没有子标题了！
                }
//				System.out.println("-测试—2.1-:"+ count_3title_list.size());

//				System.out.println("-测试—3-:"+gc_list_2_3.get(i).getName() );
//				System.out.println("-测试—3.1-:"+gc_list_2_3.get(i).getCategoryId() );


                List<GoodsCategory_virtual_forCategory> gc_list_3 = new ArrayList<GoodsCategory_virtual_forCategory>();
                for (int j = 0; j < gc_list_2_3.size(); j++) { // 经过上面的过滤  此处遍历的都是  三级标题list(key_id=1时，此处只遍历key_id(12~18,123)) ！！！	gc_list_2_3.size() -i -1	-
                    System.out.println("-测试—4.0-:" + gc_list_2_3.get(i).getCategoryId()); //gc_list_2_3.get(j).getName()
                    System.out.println("-测试—4.1-:" + gc_list_2_3.get(j).getParentId());
                    //如果外层循环循环到当前对象(用CategoryId(i)来记录)的时候(=i的时候)：if其余的(不等于i的那些[三级标题])那些对象的ParentId有等于CategoryId(i)的	则说明它们都是三级标题(把他们都记录到list中！)
                    if (gc_list_2_3.get(i).getCategoryId().toString().equals(gc_list_2_3.get(j).getParentId().toString())) {  // 为什么用这个就不行 ？!：gc_list_2_3.get(i).getCategoryId() == gc_list_2_3.get(j).getParentId()
                        //其实这块还有个限制：即在hql中规定必须isShow=1 的(即：并且要排除isShow=0的对象！)！！！
                        // gc_list_2_3.get(i).getCategoryId().toString().equals(gc_list_2_3.get(j).getParentId().toString() )

                        System.out.println("-测试—4.2-:" + gc_list_2_3.get(j).getName());
                        GoodsCategory_virtual_forCategory gc_3 = new GoodsCategory_virtual_forCategory(
                                gc_list_2_3.get(j).getCategoryId(),
                                gc_list_2_3.get(j).getMobileName(),
                                gc_list_2_3.get(j).getParentId(),
                                gc_list_2_3.get(j).getParentIdPath(),
                                gc_list_2_3.get(j).getLevel(),
                                gc_list_2_3.get(j).getImage(),

//								gc_3, //他自己
                                null    //三级标题 没有子标题list了！
                        );
                        gc_list_3.add(gc_3);
                    } else {
                        System.out.println("-测试—4.3-:" + gc_list_2_3.get(j).getName());
                    }
                }

                GoodsCategory_virtual_forCategory gc_2 = new GoodsCategory_virtual_forCategory(
                        gc_list_2_3.get(i).getCategoryId(),
                        gc_list_2_3.get(i).getMobileName(),
                        gc_list_2_3.get(i).getParentId(),
                        gc_list_2_3.get(i).getParentIdPath(),
                        gc_list_2_3.get(i).getLevel(),
                        gc_list_2_3.get(i).getImage(),

//						gc_2,	//他自己
                        gc_list_3        // gc_list_3	ddd(gc_list_2_3, gc_list_2_3.get(i) )
                );
                gc_list_2.add(gc_2);

//				break; //test: 先只看i=0 的情况
            }

            res.setStatus(Result.SUCCESS);
            res.setTipMsg("获取成功");
            res.setData(gc_list_2);
            return res;
        }

        res.setStatus(Result.FAILED);
        return res;
    }

    public List<GoodsCategory_virtual_forCategory> ddd(List<TpGoodsCategory> gc_list_2_3, TpGoodsCategory gc) {
        List<GoodsCategory_virtual_forCategory> gc_list_3 = new ArrayList<GoodsCategory_virtual_forCategory>();
        for (int j = 0; j < gc_list_2_3.size(); j++) {
            if (gc.getCategoryId() == gc_list_2_3.get(j).getParentId()) {    //if(gc_list_2_3.get(i).getCategoryId() == gc_list_2_3.get(j).getParentId() ){
                System.out.println("-测试—5-:" + gc_list_2_3.get(j).getName());

                GoodsCategory_virtual_forCategory gc_3 = new GoodsCategory_virtual_forCategory(
                        gc_list_2_3.get(j).getCategoryId(),
                        gc_list_2_3.get(j).getMobileName(),
                        gc_list_2_3.get(j).getParentId(),
                        gc_list_2_3.get(j).getParentIdPath(),
                        gc_list_2_3.get(j).getLevel(),
                        gc_list_2_3.get(j).getImage(),

                        null    //三级标题 没有子标题list了！
                );
                gc_list_3.add(gc_3);
            }
        }
        return gc_list_3;
    }


}

